package com.enjoy.studyfragment.fragment;

import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.view.View;
import android.widget.Toast;

import com.enjoy.studyfragment.R;
import com.enjoy.studyfragment.adapter.SwipeRecyclerAdapter;
import com.enjoy.studyfragment.widget.TopBarView;
import com.orhanobut.logger.Logger;
import com.yanzhenjie.recyclerview.swipe.SwipeItemClickListener;
import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;

/**
 * 上拉刷新、下拉加载更多、侧滑删除(此处未写)
 * Created by Administrator on 2018/3/17.
 */

public class SwipeRecyclerFragment extends TopBarFragment {
    @BindView(R.id.recyclerView)
    SwipeMenuRecyclerView recyclerView;
    @BindView(R.id.refreshLayout)
    SwipeRefreshLayout refreshLayout;

    private List<String> list = new ArrayList<>();
    private SwipeRecyclerAdapter adapter;

    @Override
    public Object setLayout() {
        return R.layout.fragment_swipe_recycler;
    }

    @Override
    public void init() {
        super.init();
        initRecycler();
        setListener(new TopBarView.onTitleBarClickListener() {
            @Override
            protected void onBackClick() {
                Logger.d("子类：onBackClick");
                pop();
            }

            @Override
            protected void onRightClick() {

            }
        });
    }

    @Override
    public boolean isTopBar() {
        return super.isTopBar();
    }

    @Override
    public void initTopBar(TopBarView topbar) {
        super.initTopBar(topbar);
        topbar.getTitleView().setText("列表");

    }

    private void initRecycler(){
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        refreshLayout.setOnRefreshListener(mRefreshListener); // 刷新监听。
        recyclerView.setSwipeItemClickListener(mItemClickListener); // RecyclerView Item点击监听。
        recyclerView.useDefaultLoadMore(); // 使用默认的加载更多的View。
        recyclerView.setLoadMoreListener(mLoadMoreListener); // 加载更多的监听。

        adapter = new SwipeRecyclerAdapter();
        adapter.setNewData(list);
        recyclerView.setAdapter(adapter);
        loadData(true);

    }

    /**
     * 刷新。
     */
    private SwipeRefreshLayout.OnRefreshListener mRefreshListener = new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            recyclerView.postDelayed(new Runnable() {
                @Override
                public void run() {
                    loadData(true);
                    refreshLayout.setRefreshing(false);
                }
            }, 1000); // 延时模拟请求服务器。
        }
    };

    /**
     * 加载更多。
     */
    private SwipeMenuRecyclerView.LoadMoreListener mLoadMoreListener = new SwipeMenuRecyclerView.LoadMoreListener() {
        @Override
        public void onLoadMore() {
            recyclerView.postDelayed(new Runnable() {
                @Override
                public void run() {
                    //加载数据
                    loadData(false);
                    // 数据完更多数据，一定要掉用这个方法。
                    // 第一个参数：表示此次数据是否为空。
                    // 第二个参数：表示是否还有更多数据。
                    boolean hasMore = true;
                    if(list.size() > 36){
                        hasMore = false;
                        recyclerView.loadMoreFinish(false, hasMore);
                    }
                    // 如果加载失败调用下面的方法，传入errorCode和errorMessage。
                    // errorCode随便传，你自定义LoadMoreView时可以根据errorCode判断错误类型。
                    // errorMessage是会显示到loadMoreView上的，用户可以看到。
                    // mRecyclerView.loadMoreError(0, "请求网络失败");
                }
            }, 1000);
        }
    };

    /**
     * Item点击监听。
     */
    private SwipeItemClickListener mItemClickListener = new SwipeItemClickListener() {
        @Override
        public void onItemClick(View itemView, int position) {
            Toast.makeText(getContext(), "第" + position + "个", Toast.LENGTH_SHORT).show();
        }
    };

    /**
     *
     * @param flg true 下拉刷新  false 上拉加载更多
     */
    private void loadData(boolean flg){
        if (flg) list.clear();
        List<String> newList = new ArrayList<>();
        int count = list.size();
        for(int i = count ; i < count + 12 ; i ++){
            newList.add("底"+ i +"条数据");
        }
        list.addAll(newList);
        adapter.notifyDataSetChanged();
        boolean hasMore = true;
        if(list.size() > 36 && !flg){
            hasMore = false;
        }
        recyclerView.loadMoreFinish(false, hasMore);
    }
}
